home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-01 / msoftapp.zip / CIRCLE.CPP < prev    next >
C/C++ Source or Header  |  1993-06-01  |  8KB  |  295 lines

  1. // circle.cpp : Defines the class behaviors for the application.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "circle.h"
  6.  
  7. #include "mainfrm.h"
  8. #include "circfrm.h"
  9. #include "circldoc.h"
  10. #include "circlvw.h"
  11. #include "textview.h"
  12.  
  13. #ifdef _DEBUG
  14. #undef THIS_FILE
  15. static char BASED_CODE THIS_FILE[] = __FILE__;
  16. #endif
  17.  
  18. /////////////////////////////////////////////////////////////////////////////
  19. // CCircleApp
  20.  
  21. BEGIN_MESSAGE_MAP(CCircleApp, CWinApp)
  22.     //{{AFX_MSG_MAP(CCircleApp)
  23.     ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
  24.     ON_COMMAND(ID_FILE_NEW, OnFileNew)
  25.     //}}AFX_MSG_MAP
  26.     // Standard file based document commands
  27.     ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)
  28.     ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)
  29.     // Standard print setup command
  30.     ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup)
  31. END_MESSAGE_MAP()
  32.  
  33. /////////////////////////////////////////////////////////////////////////////
  34. // CCircleApp construction
  35.  
  36. CCircleApp::CCircleApp()
  37. {
  38.     // TODO: add construction code here,
  39.     // Place all significant initialization in InitInstance
  40. }
  41.  
  42. /////////////////////////////////////////////////////////////////////////////
  43. // The one and only CCircleApp object
  44.  
  45. CCircleApp NEAR theApp;
  46.  
  47. /////////////////////////////////////////////////////////////////////////////
  48. // CCircleApp initialization
  49.  
  50.  
  51. BOOL CCircleApp::InitInstance()
  52.     { 
  53.     // Initialize VBX Runtime support by adding this line:
  54.     EnableVBX();                     
  55.     
  56.     // Standard initialization
  57.     // If you are not using these features and wish to reduce the size
  58.     //  of your final executable, you should remove from the following
  59.     //  the specific initialization routines you do not need.
  60.  
  61.     SetDialogBkColor(RGB(255,255,255));        // set dialog background color to gray
  62.     LoadStdProfileSettings();  // Load standard INI file options (including MRU)
  63.     
  64.     // We create two doc template objects to orchestrate the creation of two
  65.     // distinct MDI children-hosted views of the document: (1) the check
  66.     // check view and (2) the book view.
  67.     //
  68.     // We register both doc templates with the CWinApp object, by calling
  69.     // AddDocTemplate.  However, if we were to do this and nothing else, then
  70.     // the framework would mistakenly believe that the application supports
  71.     // two document types.  The framework would display a File New dialog
  72.     // that lists two document types, both which would be "Circle".
  73.     // We avoid this problem by removing the third string from 
  74.     // the document template for the text frame/view.  Specifically,
  75.     // the strings for documents IDR_GRAPHICFRAME and IDR_TEXTFRAME are,
  76.     // respectively:
  77.     //
  78.     //       "GraphicView\nCircle\nCircle\n
  79.     //        Circle File (*.cir)\n.cir\n
  80.     //        CircleFileType\nCircle File Type"
  81.     // and
  82.     //       "TextView\nCircle\n\n
  83.     //        Circle File (*.cir)\n.cir\n
  84.     //        CircleFileType\nCircle File Type"
  85.     //
  86.     // Finding no GetDocString(CDocTemplate::fileNewName) for the
  87.     // second document template, CWinApp concludes that there is only
  88.     // one document type supported by the application (the "Circle"
  89.     // document type specified in the first document template; and
  90.     // therefore does not present the user with a File New dialog.
  91.  
  92.     m_pGraphicViewTemplate = new CMultiDocTemplate(IDR_GRAPHICFRAME,
  93.             RUNTIME_CLASS(CCircleDoc),
  94.             RUNTIME_CLASS(CCircleFrame),        
  95.             RUNTIME_CLASS(CGraphicView));
  96.     AddDocTemplate(m_pGraphicViewTemplate);
  97.  
  98.     m_pTextViewTemplate = new CMultiDocTemplate(IDR_TEXTFRAME,
  99.             RUNTIME_CLASS(CCircleDoc),
  100.             RUNTIME_CLASS(CCircleFrame),        
  101.             RUNTIME_CLASS(CTextView));
  102.     AddDocTemplate(m_pTextViewTemplate);
  103.  
  104.     // create main MDI Frame window
  105.     CMainFrame* pMainFrame = new CMainFrame;
  106.     if (!pMainFrame->LoadFrame(IDR_MAINFRAME))
  107.         return FALSE;
  108.     pMainFrame->ShowWindow(m_nCmdShow);
  109.     pMainFrame->UpdateWindow();
  110.     m_pMainWnd = pMainFrame;
  111.  
  112.     // create a new document
  113.     OnFileNew();
  114.  
  115.     return TRUE;
  116.     } 
  117.  
  118.  
  119. void CCircleApp::OnFileNew()
  120.     {
  121.     //  Let the default WinApp::OnFileNew() create the 1st (graphic) view, based on the 
  122.     //    document template already "loaded" (in CCircleApp::InitInstance()).
  123.     //
  124.     CWinApp::OnFileNew();
  125.     
  126.     //    Now create the 2nd (text) view explicitly, based on the same document.
  127.     //
  128.     CView *pViewWnd = (CView *)CWnd::GetFocus();
  129.     CCircleDoc* pDoc = (CCircleDoc *) (pViewWnd->GetDocument());
  130.     if (pDoc == NULL)
  131.         {
  132.         return;
  133.         } 
  134.     
  135.     CFrameWnd* pNewFrame = m_pTextViewTemplate->CreateNewFrame(pDoc, NULL);
  136.     if (pNewFrame == NULL)
  137.         {
  138.         return;
  139.         }
  140.     m_pTextViewTemplate->InitialUpdateFrame(pNewFrame, pDoc);
  141.  
  142.     // Tile all MDI children windows within the MDI frame window.
  143.     //
  144.     ASSERT(pNewFrame->IsKindOf(RUNTIME_CLASS(CMDIChildWnd)));
  145.     CMDIFrameWnd* pMDIFrameWnd = ((CMDIChildWnd*)pNewFrame)->GetMDIFrame();
  146.     ASSERT(pMDIFrameWnd != NULL);
  147.     pMDIFrameWnd->MDITile(MDITILE_HORIZONTAL);
  148.     }
  149.  
  150.  
  151. CDocument* CCircleApp::OpenDocumentFile(LPCSTR lpszFileName)
  152. {
  153.     // CWinApp::OpenDocmentFile creates the first MDI child window
  154.     // for the graphic view. This override creates the second MDI child
  155.     // window for the text view. Then it tiles the two MDI children
  156.     // windows.
  157.  
  158.     CCircleDoc* pDoc = (CCircleDoc*)CWinApp::OpenDocumentFile(lpszFileName);
  159.     if (pDoc == NULL)
  160.     {
  161.     //    CString strMessage;
  162.     //    AfxFormatString1(strMessage, IDS_CANNOT_OPEN_CHECKBOOK, 
  163.     //        lpszFileName);
  164.     //    AfxMessageBox(strMessage);
  165.         return NULL;
  166.     }
  167.  
  168.     CFrameWnd* pNewFrame = m_pTextViewTemplate->CreateNewFrame(pDoc, NULL);
  169.     if (pNewFrame == NULL)
  170.         return pDoc;
  171.     m_pTextViewTemplate->InitialUpdateFrame(pNewFrame, pDoc);
  172.  
  173.     // Tile the two MDI children windows within the MDI frame window.
  174.  
  175.     ASSERT(pNewFrame->IsKindOf(RUNTIME_CLASS(CMDIChildWnd)));
  176.     CMDIFrameWnd* pMDIFrameWnd = ((CMDIChildWnd*)pNewFrame)->GetMDIFrame();
  177.     ASSERT(pMDIFrameWnd != NULL);
  178.     pMDIFrameWnd->MDITile(MDITILE_HORIZONTAL);
  179.  
  180.     return pDoc;
  181. }
  182.  
  183. /////////////////////////////////////////////////////////////////////////////
  184. // CAboutDlg dialog used for App About
  185.  
  186. class CAboutDlg : public CDialog
  187. {
  188. public:
  189.     CAboutDlg();
  190.  
  191. // Dialog Data
  192.     //{{AFX_DATA(CAboutDlg)
  193.     enum { IDD = IDD_ABOUTBOX };
  194.     CVBControl*    m_pCircle;
  195.     COLORREF    m_BackColor;
  196.     int        m_Top;
  197.     int        m_Left;
  198.     //}}AFX_DATA
  199.  
  200. // Implementation
  201. protected:
  202.     virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
  203.     //{{AFX_MSG(CAboutDlg)
  204.     afx_msg void OnClickinCircle1(UINT, int, CWnd*, LPVOID);
  205.     afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
  206.     //}}AFX_MSG
  207.     DECLARE_MESSAGE_MAP()
  208. };
  209.  
  210. CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
  211. {
  212.     //{{AFX_DATA_INIT(CAboutDlg)
  213.     m_pCircle = NULL;
  214.     m_BackColor = RGB(255,0,0);
  215.     m_Top = 0;
  216.     m_Left = 0;
  217.     //}}AFX_DATA_INIT
  218. }
  219.  
  220. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  221. {
  222.     CDialog::DoDataExchange(pDX);
  223.     //{{AFX_DATA_MAP(CAboutDlg)
  224.     DDX_VBControl(pDX, IDC_CIRCLE1, m_pCircle);
  225.     DDX_VBColor(pDX, IDC_CIRCLE1, 2, m_BackColor);
  226.     DDX_VBInt(pDX, IDC_CIRCLE1, 4, m_Top);
  227.     DDX_VBInt(pDX, IDC_CIRCLE1, 3, m_Left);
  228.     //}}AFX_DATA_MAP
  229. }
  230.  
  231. BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
  232.     //{{AFX_MSG_MAP(CAboutDlg)
  233.     ON_VBXEVENT(VBN_CLICKIN, IDC_CIRCLE1, OnClickinCircle1)
  234.     ON_WM_LBUTTONDBLCLK()
  235.     //}}AFX_MSG_MAP
  236. END_MESSAGE_MAP()
  237.  
  238. // App command to run the dialog
  239. void CCircleApp::OnAppAbout()
  240.     {
  241.     CAboutDlg aboutDlg;
  242.     aboutDlg.DoModal();
  243.     } 
  244.  
  245. void CAboutDlg::OnClickinCircle1(UINT, int, CWnd*, LPVOID)
  246.     {
  247.     // bounce the ball - method 1    
  248.     for (int i=0; i < 50; i++)
  249.         {
  250.         m_Top  += 4;
  251.         m_Left += 4;
  252.         UpdateData(FALSE);
  253.         UpdateWindow();
  254.         }
  255.  
  256.     // bounce the ball - method 2
  257.     for (int j=50; j > 0; j--)
  258.         {
  259.         m_Top  -= 4;
  260.         m_Left -= 4;
  261.         m_pCircle->SetNumProperty("Top", j);
  262.         m_pCircle->SetNumProperty("Left",j);
  263.         UpdateWindow();
  264.         }
  265.     }
  266.  
  267.  
  268. //{{AFX_VBX_REGISTER_MAP()
  269.     UINT NEAR VBN_CLICKIN = AfxRegisterVBEvent("CLICKIN");
  270. //}}AFX_VBX_REGISTER_MAP
  271.  
  272. void CAboutDlg::OnLButtonDblClk(UINT nFlags, CPoint point)
  273.     {
  274.     // bounce the ball - method 1    
  275.     for (int i=0; i < 50; i++)
  276.         {
  277.         m_Top  += 4;
  278.         m_Left += 4;
  279.         UpdateData(FALSE);
  280.         UpdateWindow();
  281.         }
  282.     
  283.     // bounce the ball - method 2
  284.     for (int j=50; j > 0; j--)
  285.         {
  286.         m_Top  -= 4;
  287.         m_Left -= 4;
  288.         m_pCircle->SetNumProperty("Top", j);
  289.         m_pCircle->SetNumProperty("Left",j);
  290.         UpdateWindow();
  291.         }
  292.         
  293.     CDialog::OnLButtonDblClk(nFlags, point);
  294.     }
  295.